﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyDelegateDemo.Linq
{
    public static class RichardLinq
    {
        /// <summary>
        /// 扩展方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="students"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        public static List<T> RichardWhere<T>(this List<T> students, Func<T, bool> func)
        {
            List<T> students1 = new List<T>(); //经过计算，这个集合和sList结果一致的；
            foreach (var student in students)
            {
                if (func(student))
                {
                    students1.Add(student);
                }
            }
            return students1;
        }



        //public static List<T> RichardWhere<T>(this List<T> students, DoWhere<T> doWhere)
        //{
        //    List<T> students1 = new List<T>(); //经过计算，这个集合和sList结果一致的；
        //    foreach (var student in students)
        //    {
        //        if (doWhere.Invoke(student))
        //        {
        //            students1.Add(student);
        //        }
        //    }
        //    return students1;
        //}

        //public delegate bool DoWhere<T>(T student);

        ///// <summary>
        ///// 传递不同的方法就是为了传递不同的业务逻辑
        ///// 就是委托传递呗，委托传递业务
        ///// 
        ///// 不就是委托的传递嘛！ +  扩展方法
        ///// 
        ///// </summary>
        ///// <param name="students"></param>
        ///// <returns></returns>
        //public static List<Student> RichardWhere(this List<Student> students, DoWhere doWhere)
        //{
        //    List<Student> students1 = new List<Student>(); //经过计算，这个集合和sList结果一致的；
        //    foreach (var student in students)
        //    { 
        //        if(doWhere.Invoke(student))
        //        {
        //            students1.Add(student);
        //        }
        //    }
        //    return students1;
        //}


        //private static bool IsOk(Student student)
        //{
        //    return student.Name.Contains("赵亮");
        //}

        //private static bool IsOk1(Student student)
        //{
        //    return student.Name.Length < 4;
        //}

        //private static bool IsOk2(Student item)
        //{
        //    return item.Id > 1
        //                && item.Name != null
        //                && item.ClassId > 2
        //                && item.Age > 20;
        //}
    }
}
